package au.com.acpfg.align.muscle;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import org.knime.core.data.DataColumnSpec;
import org.knime.core.data.renderer.DataValueRenderer;
/*
* Displays an alignment in CLUSTALW format inside a KNIME table cell (HTML pre-formatted)
*/
public class FormattedRenderer implements DataValueRenderer {
public enum FormatType { F_CLUSTALW, F_PLAIN, F_PHYLIP_INTERLEAVED, F_PHYLIP_SEQUENTIAL};
private FormatType m_format;
public FormattedRenderer(FormatType format) {
m_format = format;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (!(value instanceof MultiAlignmentCell)) {
return new JLabel();
}
MultiAlignmentCell mac = (MultiAlignmentCell) value;
String alignment = mac.getFormattedAlignment(m_format);
return new JLabel("<html><pre>"+alignment);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getDescription() {
switch (m_format) {
case F_CLUSTALW:
return "CLUSTALW";
case F_PHYLIP_INTERLEAVED:
return "Phylip (Interleaved)";
case F_PHYLIP_SEQUENTIAL:
return "Phylip (Sequential)";
default:
return "Plain";
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400,300);
}
@Override
public Component getRendererComponent(Object val) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean accepts(DataColumnSpec spec) {
return (spec != null && spec.getType().isCompatible(AlignmentValue.class));
}
}